﻿using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using CREAPA.Dominio;
using CREAPA.Dominio.contrato;
using CREAPA.Repositorio;

namespace CREAPA.RepositorioADO
{
    public class ProblemaOsRepositorioADO
    {
        private Contexto contexto;

        private void Inserir(Problema problema)
        {
            problema.Descricao = problema.Descricao.Replace("'", "");
            var strQuery = "";
            strQuery += " INSERT INTO Problema (Descricao, Prioridade, GrupoProblema, Ativo)";
            strQuery += string.Format(" values ('{0}','{1}','{2}','{3}')",
                problema.Descricao, problema.Prioridade, problema.GrupoProblema, problema.Ativo);
            using (contexto = new Contexto())
            {
                contexto.ExecutaComando(strQuery);
            }
        }
        private void Alterar(Problema problema)
        {
            problema.Descricao = problema.Descricao.Replace("'", "");
            var strQuery = "";
            strQuery += "UPDATE Problema SET ";
            strQuery += string.Format(" Descricao='{0}', ", problema.Descricao);
            strQuery += string.Format(" Prioridade='{0}', ", problema.Prioridade);
            strQuery += string.Format(" GrupoProblema='{0}', ", problema.GrupoProblema);
            strQuery += string.Format(" Ativo='{0}' ", problema.Ativo);
            strQuery += string.Format(" WHERE Id={0} ", problema.Id);
            using (contexto = new Contexto())
            {
                contexto.ExecutaComando(strQuery);
            }
        }

        public void Salvar(Problema problema)
        {
            if (problema.Id > 0)
            {
                Alterar(problema);
            }
            else
            {
                Inserir(problema);
            }
        }

        public void Excluir(int id)
        {
            using (contexto = new Contexto())
            {
                var strQuery = string.Format(" DELETE FROM Problema WHERE Id = {0}", id);
                contexto.ExecutaComando(strQuery);
            }
        }

        public Problema ListarPorId(int Id)
        {
            using (contexto = new Contexto())
            {
                var strQuery = String.Format(" SELECT * FROM Problema WHERE Id = {0}", Id);
                var retornoDataReader = contexto.ExecutaComandoComRetorno(strQuery);
                return TransformaReaderEmListaDeObjeto(retornoDataReader).FirstOrDefault();
            }
        }
       
        public IEnumerable<Problema> ListarProblemas()
        {
            using (contexto = new Contexto())
            {
                var strQuery = String.Format(" select p.Id,p.Descricao,g.Descricao GrupoProblema,pr.Descricao Prioridade,Ativo from Problema p " +
                                            " inner join GrupoProblema g on p.GrupoProblema=g.Id"+
                                            " inner join Prioridade pr on p.Prioridade=pr.Id order by p.Descricao");
                var retornoDataReader = contexto.ExecutaComandoComRetorno(strQuery);
                return TransformaReaderEmListaDeObjeto(retornoDataReader);
            }
        }

        private List<Problema> TransformaReaderEmListaDeObjeto(SqlDataReader reader)
        {

            var problema = new List<Problema>();
            while (reader.Read())
            {
                var TemObjeto = new Problema()
                {
                    Id = int.Parse(reader["Id"].ToString()),
                    Descricao = reader["Descricao"].ToString(),
                    Prioridade = reader["Prioridade"].ToString(),
                    GrupoProblema = reader["GrupoProblema"].ToString(),
                    Ativo = bool.Parse(reader["Ativo"].ToString()),
                 };
                problema.Add(TemObjeto);
            }
            reader.Close();
            return problema;
        }
    }
}






